package org.jeecg.modules.demo.crm.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;


public class DateUtils {

    public static Date stringToDate(String dateString) {
        //String dateString = "2025-09-09"; // 要转换的日期字符串
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // 定义日期格式

        try {
            Date date = formatter.parse(dateString); // 将字符串解析为Date对象
            //System.out.println("转换后的Date对象: " + date);
            return date;
        } catch (ParseException e) {
            System.out.println("日期格式错误：" + e.getMessage());
        }
        return null;
    }

    public static String dateToString(Date date) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // 定义日期格式
        try {
            String format = formatter.format(date);
            return format;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 给定一个 Date 类型的日期和天数，返回在该日期基础上加上指定天数的新日期
     * @param date 输入的 Date 类型日期
     * @param daysToAdd 要添加的天数
     * @return 新日期，也是 Date 类型
     */
    public static Date addDaysToDate(Date date, int daysToAdd) {
        // 创建一个 Calendar 实例
        Calendar calendar = Calendar.getInstance();

        // 设置 Calendar 的时间为我们输入的日期
        calendar.setTime(date);

        // 在日期上加上指定的天数
        calendar.add(Calendar.DAY_OF_MONTH, daysToAdd);

        // 从 Calendar 中获取新的日期
        return calendar.getTime();
    }

    /**
     * 获取近6个月的日期（格式为YYYY-MM）
     * @return 包含近6个月日期的列表
     */
    public static List<String> getLastSixMonths(Integer months) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();

        // 创建一个列表来存储近6个月的日期
        List<String> lastSixMonths = new ArrayList<>();

        // 循环获取近6个月的日期
        for (int i = 0; i < months; i++) {
            // 减去i个月
            LocalDate date = currentDate.minusMonths(i);
            // 格式化为YYYY-MM
            String formattedDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM"));
            // 添加到列表中
            lastSixMonths.add(formattedDate);
        }
        // 将列表反转，使其按时间顺序排列（最早月份在前）
        java.util.Collections.reverse(lastSixMonths);

        return lastSixMonths;
    }

    public static String todayStr(){
        String todayStr = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE);
        return todayStr;
    }

    public static void main(String[] args) {
        System.out.println(todayStr());
    }

}
